/*
 * Шаблонный метод (Template method) — паттерн поведения классов, 
 * шаблон проектирования , определяющий основу алгоритма и позволяющий 
 * наследникам переопределять некоторые шаги алгоритма, не изменяя его 
 * структуру в целом.
 */
package patterns;
import java.util.*;

public class TemplateMethodTest {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> map 
                          = new LinkedHashMap<String, Integer>() {
            @Override
            protected boolean removeEldestEntry(
                          Map.Entry<String, Integer> eldest) {
                if (size() > 3) {
                    List<String> keys = new ArrayList<String>(keySet());
                    String minKey = Collections.min(keys);
                    remove(minKey);
                }
                return false; //не удаляем запись
            }
        };
        map.put("aaa", 0);
        System.out.println(map);
        map.put("xxx", 0);
        System.out.println(map);
        map.put("ttt", 0);
        System.out.println(map);
        map.put("bbb", 0);
        System.out.println(map);
        map.put("yyy", 0);
        System.out.println(map);
        map.put("ccc", 0);
        System.out.println(map);
        map.put("zzz", 0);
        System.out.println(map);
        
        AbstractList l = new ArrayList();
    }
}

